package com.myzl.coal.service;

import com.myzl.coal.domain.AlarmEvent;
import com.myzl.coal.domain.Device;
import com.myzl.coal.domain.ThresholdData;
import com.myzl.common.core.domain.AjaxResult;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 阈值Service接口
 *
 * @author myzl
 * @date 2022-11-28
 */
public interface IThresholdDataService
{
    /**
     * 查询阈值
     *
     * @param id 阈值主键
     * @return 阈值
     */
    public ThresholdData selectThresholdDataById(Long id);

    /**
     * 查询阈值列表
     *
     * @param thresholdData 阈值
     * @return 阈值集合
     */
    public List<ThresholdData> selectThresholdDataList(ThresholdData thresholdData);

    /**
     * 新增阈值
     *
     * @param thresholdData 阈值
     * @return 结果
     */
    public int insertThresholdData(ThresholdData thresholdData);

    /**
     * 修改阈值
     *
     * @param thresholdData 阈值
     * @return 结果
     */
    public int updateThresholdData(ThresholdData thresholdData);

    /**
     * 批量删除阈值
     *
     * @param ids 需要删除的阈值主键集合
     * @return 结果
     */
    public int deleteThresholdDataByIds(Long[] ids);

    /**
     * 删除阈值信息
     *
     * @param id 阈值主键
     * @return 结果
     */
    public int deleteThresholdDataById(Long id);

    /**
     * 告警记录
     * @param deviceId 告警设备编号
     * @param data 验证数据
     * @param title 告警标题
     * @param content 告警内容
     * @param contentFlag 告警内容是否自动拼接
     * @param rule 告警规则
     * @return 结果
     */
    public AlarmEvent compareTo(Integer deviceId, BigDecimal data, String title, String content, boolean contentFlag, ThresholdData rule);

    /**
     * 查询设备协议
     * @param deviceTypes 设备类型集合
     * @return 结果
     */
    public AjaxResult selectDeviceAgreement(List<String> deviceTypes);

    /**
     * 获取阈值数据通过设备
     * @param device 设备
     * @return 设备阈值
     */
    public List<ThresholdData> getThresholdByDevice(Device device);

    /**
     * 获取告警文本
     * @param rule 规则
     * @return 结果
     */
    public Map<String,String> getAlarmText(ThresholdData rule);
}
